import { defineConfig, loadEnv } from 'vite'
import path from 'path'
// 引入工具方法
import { createProxy } from './build/utils'
// 加载引入插件处理方法
import { createVitePlugins } from './build/plugins'

// https://vitejs.dev/config/
/**
 * command: 情景配置，开发环境-serve 生产环境-build
 */
export default defineConfig(({ command, mode, ssrBuild }) => {
  // 获取环境变量信息
  const env = loadEnv(mode, process.cwd())
  // 代理配置信息
  const proxyList = [
    [env.VITE_APP_BASE_API, env.VITE_APP_BASE_API_URL],
  ]
  // 是否生产环境
  const isBuild = (command === 'build')
  return {
    // 开发或生产环境服务的公共基础路径
    base: env.VITE_PUBLIC_PATH || '/',
    // 开发服务器选项
    server: {
      // 是否监听所有地址
      host: true,
      // 配置端口号
      port: env.VITE_SERVER_PORT,
      // 为开发服务器配置自定义代理规则
      proxy: createProxy(proxyList)
    },
    // 将会被传递到 @rollup/plugin-alias 作为 entries 的选项
    resolve: {
      // 设置别名
      alias: {
        '@': path.resolve(__dirname, 'src'),
      },
      extensions: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']
    },
    // 依赖优化选项
    optimizeDeps: {
      // 此处路径必须跟main.js中import路径完全一致！
      include: [
        '@/../lib/vform/designer.umd.js',
        'element-plus/lib/locale/lang/zh-cn',
        'bpmn-js/lib/Modeler',
        'bpmn-js-token-simulation'
      ]
    },
    // 配置css相关
    css: {
      // 指定传递给 CSS 预处理器的选项。文件扩展名用作选项的键
      preprocessorOptions: {
        // define global scss variable
        scss: {
          additionalData: `@use '@/styles/global/index.scss' as *;`,
        }
      }
    },
    // 编译
    build: {
      commonjsOptions: {
        include: [/node_modules|lib/]
      }
    },
    // 插件
    plugins: createVitePlugins(env, isBuild),
  }
})
